package com.archerdu.base.service;

import java.io.Serializable;
import java.util.List;

import net.sf.json.JSONArray;

import org.hibernate.criterion.Order;

import com.archerdu.base.dao.BaseEntity;
import com.archerdu.base.dao.IPage;
import com.archerdu.base.dao.TreeNode;

/**
 * 业务层基类接口
 * 
 * @projectName springDemo
 * @description 业务层基类接口
 * @author archer du
 * @createDate 2013年9月27日 下午5:26:27
 * @updateUser dxf
 * @updateDate 2013年9月27日 下午5:26:27
 * @updateRemark 新建
 * @version 0.0.1
 */
public interface IBaseManager<E extends BaseEntity<K>, K extends Serializable> extends Serializable {
    /**
     * 添加对象
     * 
     * @param entity
     * @throws Exception
     */
    public void add(E entity) throws Exception;

    /**
     * 修改对象
     * 
     * @param entity
     * @throws Exception
     */
    public void modify(E entity) throws Exception;

    /**
     * 修改对象
     * 
     * @param entity
     * @throws Exception
     */
    public void modifyByMerge(E entity) throws Exception;

    /**
     * 删除对象
     * 
     * @param entity
     * @throws Exception
     */
    public void delete(E entity) throws Exception;

    /**
     * 删除对象
     * 
     * @param id
     */
    public void deleteByKey(K id);

    /**
     * 获取对象
     * 
     * @param id
     * @return
     */
    public E get(K id);

    /**
     * 获取全部对象
     * 
     * @return
     */
    public List<E> getAll();

    /**
     * 获取全部对象
     * 
     * @return
     */
    public List<E> getAll(E entity);

    /**
     * 获取全部对象
     * 
     * @return
     */
    List<E> getAll(E entity, Order order);

    /**
     * 获取全部对象
     * 
     * @return
     */
    public List<E> findByParentId(K key);

    /**
     * 分页对象
     */
    public IPage<E> pageSearch(E entity, int pageNo, int pageSize);

    /**
     * 加载子节点
     * 
     * @param region
     */
    public void loadChildren(TreeNode<E, K> entity);

    /**
     * 异步加载子节点，每次之加载一层
     * 
     * @param region
     */
    public void loadAsynChildren(TreeNode<E, K> entity);

    /**
     * 异步加载Json字符串
     * 
     * @param entity
     * @return
     */
    public String loadJson(TreeNode<E, K> entity);

    /**
     * 加载Json对象
     * 
     * @param entity
     * @return
     */
    public JSONArray loadJsonObject(TreeNode<E, K> entity);

    /**
     * 异步加载Json字符串，每次加载一层
     * 
     * @param entity
     * @return
     */
    public String loadAsynJson(TreeNode<E, K> entity);
}
